package demo08;

import red.OpenMode;

import java.util.ArrayList;
import java.util.Random;
/*
随机发红包
 */
public class RandomMode implements OpenMode{
    @Override
    public ArrayList<Integer> divide(final int totalMoney, final int totalCount) {
        ArrayList<Integer> list=new ArrayList<>();

        //随机分配，有可能多，有可能少
        //最少一分钱，最多不超过剩下金额平均数的二倍。
        //第一次发红包，随机范围是0.01~6.66元。
        //第一次发完之后，剩下的至少是3.34元。
        //此时的再发范围应该是0.01元~3.33元(取不到右边，剩下0.01)。

        //总结一下：范围的[公式]是： 1 + random.nextInt(leftMoney / leftCount * 2);
        Random r=new Random();//首先创建一个随机数生成器。
        //totalMoney是总金额，totalCount是总分数，不变
        //额外定义两个变量，分别代表剩下多少钱，剩下多少份
        int leftMoney = totalMoney;
        int leftCouunt = totalCount;


        //随机发N-1个，最后一个不需要随机发
        for (int i = 0; i < totalCount-1; i++) {
            //按照公式生产随机金额。
            int money =r.nextInt(leftMoney / leftCouunt *2) + 1;
            list.add(money);//将一个随机红包放入集合
            leftMoney -=money;//剩下的金额越发越少
            leftCouunt--;//剩下的还应该再发的红包个数，也应该递减
        }
        //最后一个红包不需要随机，直接放进去就行了
        list.add(leftMoney);

        return list;
    }
}
